class Dossier extends genericClass
{

   /**
     * Vérifie que les options concordent bien avec leurs règles
     *
     * @return boolean
     */function checkOptions() {
         $toutFonctionne = true;
         $Voyage         = NULL;
         $Options        = []; /* format : [Commande,Produit] */
         $OptionsProd    = []; 
         $Types          = [];
         $getCommandes   = "Boutique/ProduitCommande/Dossier/".$this->Get("Id");
         $Commandes      = $GLOBALS['Systeme']->Modules[$this->Module]->callData($getCommandes);
         foreach( $Commandes as $Commande ) {
             $tmpObject = new genericClass($this->Module, $Commande);
             if ( $tmpObject->Get("Type") == "Options" ) {
                 $getOptPR = "Boutique/ProduitReel/ProduitCommande/".$tmpObject->Get("Id");
                 $OptPR = $GLOBALS['Systeme']->Modules[$this->Module]->callData($getOptPR);
                 $getOpt = "Boutique/Produit/ProduitReel/".$OptPR[0]["Id"];
                 $Opt = $GLOBALS['Systeme']->Modules[$this->Module]->callData($getOpt);
                 $Options[] = array($tmpObject,new genericClass($this->Module,$Opt[0]));
             }else{
                 $Voyage = $Commande;
             }
         }

         /* On récupère les options de base de l'article pour comparaison */
         $Querys = array( "Boutique/ProduitReel/ProduitCommande/",
                          "Boutique/Produit/ProduitReel/",
                          array("Boutique/Produit/","/Configuration"),
                          array("Boutique/Configuration/","Produit/Type=Options")
                        );
         $tmpArray = array($Voyage);
         foreach( $Querys as $Query ) {
             if ( is_string($Query) ) {
                 $tmpArray = $GLOBALS['Systeme']->Modules[$this->Module]->callData($Query . $tmpArray[0]["Id"]);
             }
             else {
                 $tmpArray = $GLOBALS['Systeme']->Modules[$this->Module]->callData($Query[0] . $tmpArray[0]["Id"] . $Query[1]);
             }
         }
         
         /* On transforme le tableau d'options du produit en
            GenericClass et on verifie que les options obligatoires
            sont respectées*/
         foreach( $tmpArray as $optArray ) {
             $OptionsProd[] = new genericClass($this->Module, $optArray);
             if ($OptionsProd[count($OptionsProd) - 1]->Get("Obligatoire")) {
                 /* On vérifie qu'il existe bien une commande correspondante */
                 $obligatoireTrouve = false;
                 foreach($Options as $OptArray)
                   {
                       if ( $OptArray[1]->Get("Id") == $OptionsProd->Get("Id")) {
                           $obligatoireTrouve = true;
                       }
                   }
                 if ( !$obligatoireTrouve ) {
                     echo( "Erreur, option obligatoire non trouvée" );
                     $toutFonctionne = false;
                 }
             }
         }

         /* On verifie chaque commande */
         foreach( $Options as $OptArray ) {
             if ( !$OptArray->Verify() ) {
                 echo( "Erreur, option défectueuse" );
                 $toutFonctionne = false;
             }
         }

         /* On regroupe les Options par Type, afin de pouvoir vérifier
          les dernières contraintes*/
         $getTypes = "Boutique/Type";
         $TypesArray = $GLOBALS['Systeme']->Modules[$this->Module]->callData($Query . $tmpArray[0]["Id"]);
         foreach( $TypesArray as $Type ) {
             $OptType = [];
             for( $i=0; $i<count($Options); $i++ ) {
                 if ( $Options[$i][1]->Get("TypeOption") == $Type["Nom"] ) {
                     $OptType[] = $Options[$i][0];
                 }
             }
             $Types[] = array(new genericClass($this->Module, $Type),$OptType);
         }

         /* Pour les types qui demandent l'"Obligation par type", on vérifie */
         foreach( $TypesArray as $Type ) {
             if ( $Type[0]->Get("ObligatoireType")) {
                 if (empty($Type[1]) || !$Type[1][0]->VerifyObligatoireType($Type[1])) {
                     echo("Pas tout le monde !!");
                     $toutFonctionne = False;
                 }
             }
         }

         return $toutFonctionne;
     }
};